// Kony

#pragma once

#include "CoreMinimal.h"
#include "GameplayEffectExecutionCalculation.h"
#include "ExecCalc_Damage.generated.h"

class UCharacterClassInfo;
class ICombatInterface;

/**
 * 伤害计算类 ExecutionCalculation ，这个计算比MMC的伤害计算要复杂，因为MMC的伤害计算只考虑了伤害来源，而这个计算还要考虑伤害目标
 * 并且MMC一次只能操作一个属性，而这个计算可以操作多个属性
 */
UCLASS()
class GASC_HUANLING_API UExecCalc_Damage : public UGameplayEffectExecutionCalculation
{
	GENERATED_BODY()
public:
	UExecCalc_Damage();
	
	/* 重写Execute_Implementation方法，用于实现自定义的游戏效果执行计算逻辑
	 * 参数ExecutionParams包含执行计算所需的所有输入数据
	 * 参数OutExecutionOutput用于输出计算结果*/
	virtual void Execute_Implementation(const FGameplayEffectCustomExecutionParameters& ExecutionParams, OUT FGameplayEffectCustomExecutionOutput& OutExecutionOutput) const override;
	
	//封装读取属性系数
	float GetDamageCoefficientFromCurve(const UCharacterClassInfo* CharacterClassInfo, int32 PlayerLevel,FName CurveName) const;
};

